home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / commands / make / check.c next >
C/C++ Source or Header  |  1990-07-15  |  3KB  |  129 lines

  1. /*************************************************************************
  2.  *
  3.  *  m a k e :   c h e c k . c
  4.  *
  5.  *  debugging stuff: Check structures for make.
  6.  *========================================================================
  7.  * Edition history
  8.  *
  9.  *  #    Date                         Comments                       By
  10.  * --- -------- ---------------------------------------------------- ---
  11.  *   1    ??                                                         ??
  12.  *   2 23.08.89 adapted to new name tree structure                   RAL
  13.  *   3 30.08.89 indention changed                                    PSH,RAL
  14.  *   4 06.09.89 prt output redirected to stdout                      RAL
  15.  * ------------ Version 2.0 released ------------------------------- RAL
  16.  *
  17.  *************************************************************************/
  18.  
  19. #include "h.h"
  20.  
  21.  
  22. /*
  23.  *    Prints out the structures as defined in memory.  Good for check
  24.  *    that you make file does what you want (and for debugging make).
  25.  */
  26. void prt()
  27. {
  28.   register struct name   *np;
  29.   register struct depend *dp;
  30.   register struct line   *lp;
  31.   register struct cmd    *cp;
  32.   register struct macro  *mp;
  33.  
  34.   register int           i;
  35.  
  36.   for (mp = macrohead; mp; mp = mp->m_next)
  37.     printf("%s = %s\n", mp->m_name, mp->m_val);
  38.  
  39.   putchar('\n');
  40.  
  41.   for (i = 0; i <= maxsuffarray ; i++)
  42.         for (np = suffparray[i]->n_next; np; np = np->n_next)
  43.         {
  44.         if (np->n_flag & N_DOUBLE)
  45.             printf("%s::\n", np->n_name);
  46.         else
  47.             printf("%s:\n", np->n_name);
  48.         if (np == firstname)
  49.             printf("(MAIN NAME)\n");
  50.         for (lp = np->n_line; lp; lp = lp->l_next)
  51.         {
  52.             putchar(':');
  53.             for (dp = lp->l_dep; dp; dp = dp->d_next)
  54.                 printf(" %s", dp->d_name->n_name);
  55.             putchar('\n');
  56.  
  57.             for (cp = lp->l_cmd; cp; cp = cp->c_next)
  58. #ifdef os9
  59.                 printf("-   %s\n", cp->c_cmd);
  60. #else
  61.                 printf("-\t%s\n", cp->c_cmd);
  62. #endif
  63.             putchar('\n');
  64.         }
  65.         putchar('\n');
  66.         }
  67. }
  68.  
  69.  
  70. /*
  71.  *    Recursive routine that does the actual checking.
  72.  */
  73. void check(np)
  74. struct name *np;
  75. {
  76.   register struct depend *dp;
  77.   register struct line   *lp;
  78.  
  79.  
  80.     if (np->n_flag & N_MARK)
  81.         fatal("Circular dependency from %s", np->n_name,0);
  82.  
  83.     np->n_flag |= N_MARK;
  84.  
  85.     for (lp = np->n_line; lp; lp = lp->l_next)
  86.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  87.             check(dp->d_name);
  88.  
  89.     np->n_flag &= ~N_MARK;
  90. }
  91.  
  92.  
  93. /*
  94.  *    Look for circular dependancies.
  95.  *    ie.
  96.  *        a: b
  97.  *        b: a
  98.  *    is a circular dep
  99.  */
  100. void circh()
  101. {
  102.   register struct name *np;
  103.   register int          i;
  104.  
  105.  
  106.   for (i = 0; i <= maxsuffarray ; i++)
  107.        for (np = suffparray[i]->n_next; np; np = np->n_next)
  108.         check(np);
  109. }
  110.  
  111.  
  112. /*
  113.  *    Check the target .PRECIOUS, and mark its dependentd as precious
  114.  */
  115. void precious()
  116. {
  117.   register struct depend *dp;
  118.   register struct line   *lp;
  119.   register struct name   *np;
  120.  
  121.  
  122.   if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
  123.     return;
  124.  
  125.   for (lp = np->n_line; lp; lp = lp->l_next)
  126.     for (dp = lp->l_dep; dp; dp = dp->d_next)
  127.         dp->d_name->n_flag |= N_PREC;
  128. }
  129.